Some computer applications are so large and the number of users of the applications so large that it makes sense to divide up the work of the application among multiple computers and, potentially, to store the information used by the application in many different places. Such applications are commonly referred to as distributed applications. Conventional distributed applications store shared information in multiple databases that may reside on many different computers.
Recently, however, software developers have begun to create distributed object systems. Distributed object systems comprise objects shared in computer memory and one or more processes running on one or more computers. In distributed object systems, then, an additional shared resource, the distributed object, needs to be accounted for.
Persistence of data is an important attribute in a distributed system. Data is preferably stored in a nonvolatile storage medium so that the system may be both recovered in the event of a failure and restarted in the state in which the system was shut down. A single transaction in a distributed system may update a number of items of data. If only some of the data items are persistently stored while others are not, then the state of the system may not be recoverable.
Maintaining persistence in distributed object systems presents several challenges. A distributed object system may access legacy database systems. For any number of reasons, the distributed object application developer may not wish to structure object relationships in a distributed system in the same way that table relationships exist in legacy databases. In other words, the application developer may wish to divide the data of a single table in the database up among multiple objects in the distributed object system or may wish to combine data from several tables into a single object.
Object relationships provide mechanisms for identifying objects related to each other. Where the state of objects in a distributed object system is persistently maintained in a relational database, such relationships must be converted to corresponding foreign keys in associated tables.
Another problem in maintaining persistence in distributed object systems is that different objects may need to be processed differently for persistence depending upon how their state is stored in the relational database. Thus, application developers may need to create persistence mechanisms unique to each object because of the variation in the relationships between objects and their persistent state stored in a database.